From 59960ae1b877b458a15f992e66c5f31c8d1db2d0 Mon Sep 17 00:00:00 2001 From: robertl Date: Fri, 20 Aug 2004 02:56:23 +0000 Subject: [PATCH] Add track reads of alternate PCX format used by www.radroutenplaner.nrw.de. --- gpsbabel/pcx.c | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/gpsbabel/pcx.c b/gpsbabel/pcx.c index 2a363c7e5..61f1a3960 100644 --- a/gpsbabel/pcx.c +++ b/gpsbabel/pcx.c @@ -77,6 +77,9 @@ data_read(void) char ibuf[122]; struct tm tm; route_head *track_head = NULL; + int n; + char lathemi, lonhemi; + for(;fgets(ibuf, sizeof(ibuf), file_in);) { switch (ibuf[0]) { @@ -119,11 +122,22 @@ data_read(void) } break; case 'T': - if (track_head == NULL) { - fatal(MYNAME ": track record found before track header.\n"); - } - sscanf(ibuf, "T %lf %lf %s %s %ld", + n = sscanf(ibuf, "T %lf %lf %s %s %ld", &lat, &lon, date, time, &alt); + + if (n == 0) { + /* Attempt alternate PCX format used by + * www.radroutenplaner.nrw.de */ + n = sscanf(ibuf, "T %c%lf %c%lf %s %s %ld", + &lathemi, &lat, &lonhemi, &lon, date, + time, &alt); + if (lathemi == 'S') lat = -lat; + if (lonhemi == 'W') lon = -lon; + } else if (n == 0) { + fatal(MYNAME ":Unrecognized track line '%s'", + ibuf); + } + memset(&tm, 0, sizeof(tm)); tm.tm_hour = atoi(time); tm.tm_min = atoi(time+3); @@ -138,6 +152,12 @@ data_read(void) wpt_tmp->latitude = lat; wpt_tmp->longitude = lon; wpt_tmp->altitude = alt; + /* Did we get a track point before a track header? */ + if (track_head == NULL) { + track_head = route_head_alloc(); + track_head->rte_name = strdup("Default"); + track_add_head(track_head); + } route_add_wpt(track_head, wpt_tmp); default: ; -- 2.30.2